Skip to content

test(c-tool-calls): assert on chat-tool-calls + chat-tool-call-card primitives directly#497

Merged
blove merged 1 commit into
mainfrom
claude/tool-calls-spec
May 20, 2026
Merged

test(c-tool-calls): assert on chat-tool-calls + chat-tool-call-card primitives directly#497
blove merged 1 commit into
mainfrom
claude/tool-calls-spec

Conversation

@blove
Copy link
Copy Markdown
Contributor

@blove blove commented May 20, 2026

Summary

Tightens the existing tool-call UI assertion in `c-tool-calls.spec.ts` from a generic `getByRole('button', { name: /lookup_flight|tool/i })` to the specific `@ngaf/chat` custom-element selectors.

Before vs after

Before: `getByRole('button', { name: /lookup_flight|tool/i }).first()` — matches any button containing those substrings, including unrelated UI like settings menus.

After: Three layered assertions on the actual primitives:

  • `` visible (wrapper primitive mounted).
  • `` visible (per-call card rendered).
  • Card contains `lookup_flight` text (right tool name on the card, not just on any button).

Same end-to-end behavior covered; reduced false-pass risk if the demo template ever adds an unrelated button somewhere on the page.

Also switches the final-bubble text assertion from `innerText().toLowerCase()` + `expect.toContain()` to Playwright's built-in `toContainText({ ignoreCase: true })` which auto-retries on the locator.

Identified during

Post-Task-#4 e2e audit (item #10).

Test plan

  • CI `Cockpit — e2e (cockpit-chat-tool-calls-angular)` matrix expansion passes.

🤖 Generated with Claude Code

…rimitives directly

Tightens the existing tool-call UI assertion from a generic
getByRole('button', { name: /lookup_flight|tool/i }) (which would match
any unrelated button on the page) to the specific @ngaf/chat custom-element
selectors:

- <chat-tool-calls> visible (proves the wrapper primitive mounted).
- <chat-tool-call-card> visible + contains 'lookup_flight' (proves the
  per-call card rendered with the right tool name).

Same end-to-end coverage; more specific surface area means less false-pass
risk if the demo template ever adds an unrelated button on the page.

Also switches the final-bubble text assertion from innerText().toLowerCase()
to Playwright's built-in toContainText({ ignoreCase: true }) — auto-retries
on the locator instead of one-shot.

Identified during the post-Task-#4 e2e audit (item #10).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
threadplane Ready Ready Preview, Comment May 20, 2026 10:45pm

Request Review

@blove blove merged commit 7aeb2eb into main May 20, 2026
39 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant